 

package com.junjie.shortlink.project.mq.producer;


import cn.hutool.core.lang.UUID;
import com.junjie.shortlink.project.dto.biz.ShortLinkStatsRecordDTO;
import lombok.RequiredArgsConstructor;
import org.redisson.api.RBlockingDeque;
import org.redisson.api.RDelayedQueue;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

import static com.junjie.shortlink.project.common.constant.RedisKeyConstant.DELAY_QUEUE_STATS_KEY;


/**
 * 延迟消费短链接统计发送者
 * 在没有MQ之前的解决方案，用来削峰
 */
@Component
@Deprecated
@RequiredArgsConstructor
public class DelayShortLinkStatsProducer {

    private final RedissonClient redissonClient;

    /**
     * 发送延迟消费短链接统计
     *
     * @param statsRecord 短链接统计实体参数
     */
    public void send(ShortLinkStatsRecordDTO statsRecord) {
        // 设置消息队列唯一ID
        statsRecord.setKeys(UUID.fastUUID().toString());
        // 获取Redis中的阻塞双端队列
        RBlockingDeque<ShortLinkStatsRecordDTO> blockingDeque = redissonClient.getBlockingDeque(DELAY_QUEUE_STATS_KEY);
        // 从阻塞双端队列中获取Redis中的延迟队列
        RDelayedQueue<ShortLinkStatsRecordDTO> delayedQueue = redissonClient.getDelayedQueue(blockingDeque);
        // 将统计实体参数放入延迟队列中，并设置过期时间为5秒
        delayedQueue.offer(statsRecord, 5, TimeUnit.SECONDS);
    }
}
